﻿using System.Collections;
using System.Collections.Generic;
using UnityEngine;

/// <summary>
/// 对齐行为 - Boid算法的核心行为之一
/// 使个体与周围邻居保持相同的朝向，形成群体的一致性运动
/// 可在编辑器中创建：Create > Flock > Behavior > Alignment
/// </summary>
[CreateAssetMenu(menuName = "Flock/Behavior/Alignment")]
public class AlignmentBehavior : FilteredFlockBehavior
{
    /// <summary>
    /// 计算对齐行为的移动向量
    /// 计算邻居的平均朝向，使个体朝向与邻居保持一致
    /// </summary>
    /// <param name="agent">当前个体</param>
    /// <param name="context">邻居对象列表</param>
    /// <param name="flock">所属群体</param>
    /// <returns>对齐行为的移动向量</returns>
    public override Vector2 CalculateMove(FlockAgent agent, List<Transform> context, Flock flock)
    {
        // 如果没有邻居，保持当前朝向
        if (context.Count == 0)
            return agent.transform.up;

        // 计算所有邻居的平均朝向
        Vector2 alignmentMove = Vector2.zero;
        
        // 应用过滤器（如果存在）
        List<Transform> filteredContext = (filter == null) ? context : filter.Filter(agent, context);
        
        // 累加所有邻居的朝向向量
        foreach (Transform item in filteredContext)
        {
            alignmentMove += (Vector2)item.transform.up;
        }
        
        // 计算平均朝向
        alignmentMove /= context.Count;

        return alignmentMove;
    }
}
